#ifndef _SEQSTRING_
#define _SEQSTRING_

/**
 * 串和数组是内容受限的线性表, 串中的内容只能是字符
 * 
 * 以下是串的顺序表示方式
 */

#define Status int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

// 第一种方式, 变长分配储存表示
// typedef struct {
//     // 指向动态内存分配的首地址的指针
//     char* data;
//     // 串的长度
//     int length;
// } SeqString;


// 第二种方式, 定长方式表示
#define MAXSIZE 255

typedef struct {
    // 传中的下标一般从1开始, 但实际中c语言中的数组下标是从0开始的, 所以我们可以多申请一个位置的空间, 下标为0的位置不放置元素
    char data[MAXSIZE + 1];
    int length;
} SeqString;

// 初始化串
Status initStr(SeqString *s);

// 串的赋值
Status StrAssign(SeqString *s1, char* str);

// 串连接
Status StrCat(SeqString *s1, SeqString s2, SeqString s3);

// 求串长
unsigned int StrLen(SeqString s);

// 串判空
Status isEmpty(SeqString s);

// 清空串
Status ClearString(SeqString *s);

// 串比较
Status StrCompare(SeqString s1, SeqString s2);

// 求子串
Status SubString(SeqString s1, unsigned int startIndex, unsigned int endIndex, SeqString *result);

// 串拷贝
Status StrCopy(SeqString *s1, SeqString s2);

// 子串位置
unsigned int indexOf(SeqString s, SeqString subs);

// 子串插入
Status strInsert(SeqString *s, int pos, SeqString s2);

// BF算法, 暴力破解法
int Index_BF(SeqString s, SeqString t);

// // 子串删除
// Status strDelete(SeqString *s, int pos, int len);

// // 串替换
// Status replace(SeqString s, SeqString s2);

#endif